/*
 * @Description: 
 * @Author: rendc
 * @Date: 2024-10-16 10:53:20
 * @LastEditors: rendc
 * @LastEditTime: 2024-10-16 14:39:38
 */

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;

/**
 * Test - 可以试用10次的软件
 */
public class Test {

  // 软件最大试用次数 - ?java方法内部不能有静态变量?
  private static final int MAX_COUNT = 10;
  static {
    // checkCount();
  }

  // 定义检查次数的方法
  private static void checkCount() {
    // 读取存储次数的文件 -
    // 提前创建好，如果文件被误删除，系统可以自动创建
    String filePath = "/Users/cc/Desktop/Java/day34/homework/Q8/count.txt";
    File file = new File(filePath);
    System.out.println("file: " + file);
    BufferedReader br = null;
    BufferedWriter bw = null;
    try {
      if (!file.exists()) {
        file.createNewFile();
      }
      // 初始化输入流
      br = new BufferedReader(new FileReader(file));
      System.out.println("br:" + br);
      // 读取内容
      String line = br.readLine();
      // 初始化输出流
      bw = new BufferedWriter(new FileWriter(file));
      System.out.println("line:" + line);
      if (line == null || line.equals("")) {
        // 证明文件内容为空 显示使用次数
        showCount(1);
        // 将使用次数，写到配置文件中
        writeCount(bw, 1);
        return;
      }
      // 判断使用次数是否大于最大次数
      int count = Integer.parseInt(line);
      if (count >= MAX_COUNT) {
        System.out.println("试用次数试用完毕，请购买正式版");
        writeCount(bw, count);
        // 退出软件
        System.exit(0);
      }
      // 正常使用
      showCount(++count);
      writeCount(bw, count);
    } catch (Exception e) {
      // TODO: handle exception
      e.printStackTrace();
    } finally {
      if (bw != null) {
        try {
          bw.close();
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
      if (br != null) {
        try {
          br.close();
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    }
  }

  // 记录使用次数的方法
  private static void writeCount(BufferedWriter bw, int count) {
    try {
      bw.write(String.valueOf(count));
      bw.flush();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  // 显示可用次数
  private static void showCount(int count) {
    System.out.println("您已使用次数：" + count + "次，还剩" + (MAX_COUNT - count) + "次使用机会。");
  }

  // 软件主入口
  public static void main(String[] args) {
    // 如果现在有⼀款只能试⽤10次的软件，超过10次之后就需要提醒⽤户购买正版软件。（程序运⾏⼀次，使⽤次数就要减⼀次）
    // 提示：将试⽤的次数写到⼀个⽂件中，每次启动时对其进⾏读取并进⾏判断。
    System.out.println("欢迎使用本公司软件系统！现在是北京时间：");
    checkCount();
  }
}